salesforce零基础学习(一百二十一)Limitation篇之Heap Size Limitation |
您所在的位置:网站首页 › 香橙派4 python › salesforce零基础学习(一百二十一)Limitation篇之Heap Size Limitation |
本篇参考: 此前讲过CPU limitation:salesforce零基础学习(一百零二)Limitation篇之 CPU Limit本篇说一下项目中也经常用到的 heap size limitation以及best practice. 首先先说一下 salesforce中的 heap size简单概念, salesforce中的heap size和java中的heap size概念基本相同,当对象或者变量创建时,就会给分配内存,当运行时基于逻辑动态分配内存。salesforce限制同步最大的 apex heap size是6MB,异步的场景最多的是12MB. 当transaction执行时,太多数据存储在内存中的情况下,可能触发 The “Apex heap size too large” 的错误。 如果去调查某一个功能逻辑的heap size情况,可以通过以下的步骤来分析: 通过debug log查看当前的 heap size情况。 在debug log中通过HEAP_ALLOCATE来确定对象或者变量的分配内存的情况。 通过最后的Maximum heap size: 了解当前的执行的transaction所使用的heap size情况。 针对heap size limit拥有两个方法可以查询:Best practice1. 不使用class级别的变量去存储大量数据(也不一定局限于 class级别的变量,list尽量别存储大量数据)错误案例: 下面的demo中: baseList,SampleMap的value以及tempt list都指向了同一个内存地址,执行以后,这个内存地址便会超限,从而触发The “Apex heap size too large” 的limitation 简单的改动就是声明一个新的 list,避免之前的内存倍速增长。 使用SOQL for loop从大量查询的数据中迭代和处理数据,官方也介绍了很多的 SOQL for loop的demo。详情可查看:针对 heap size修改的情况下,官方给出的建议,此种情况下,每200条执行一次数据,大量的减少了 heap size的使用。 _SOQL for loop通过调用SOAP API的query和queryMore方法,使用高效的分块来检索所有sObjects(每次处理200条数据)。开发人员可以通过使用SOQL for loop处理返回多条记录的查询结果来避免堆大小的限制。_ 当然,在多租户环境下,我们的limitation也不止 heap size,上述方法是否是最优解需要具体情况具体分析。当我们使用 SOQL for loop并且数据量大的情况下,这种方法可能会导致使用更多的CPU周期,逻辑执行时间也变得多了。除了官方上面的链接介绍以外,也可以看一下下面的邱老板的demo 在运行时环境下,通过在迭代list / set / map时从集合中移除不必要的item来减小堆大小。此外,还使用了几个优化点作为参考: [En]In addition, a few optimization points are used as a reference: 1. 避免使用无效的临时变量。比如代码中的临时变量后续没有调用,造成了额外的花销,这种没有用的代码尽量删除。2. 更短的命名以及Field api 名称: 诚然使用好的命名规范有更强的可读性,不过短的名字确实可以省一些 heap size移除不必要的debug log语句,特别是生产环境。 总结:heap size和CPU limitation的优化相辅相成,不要为了某一个优化而特意放弃另外一个,彼此形成一下平衡。篇中有错误地方欢迎指出,有不懂欢迎留言。 Original: https://www.cnblogs.com/zero-zyq/p/16876033.htmlAuthor: zero.zhangTitle: salesforce零基础学习(一百二十一)Limitation篇之Heap Size Limitation 相关阅读 Title: python的scrapy爬虫模块间进行传参_Python爬虫第八天:ScrapyShell|yield item和请求传参…内容简述: 一:Scrapy Shell 二:yield item和请求 三:请求传参-高级请求 一:Scrapy Shell 运行在终端的工具,用来调试scrapy。可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式。 简单使用—糗事百科 【温馨提示】:当咱们有时加载https请求时,有可能会报错 问题描述:[] 解决方案: 第一步: scrapy shell -s USER_AGENT=’Mozilla/5.0′ 第二步:fetch(‘url’) 示例参考: fetch(“https://www.qiushibaike.com”) A-response对象 属性 text:字符串格式的html body:二进制格式的html encoding:响应编码 url:所请求的url status:响应状态码 headers:响应头 方法: xpath():据xpath获取所有selector对象(scrapy内部封装的一个类的对象)的列表 例:获取糗事百科用户名 name_list=response.xpath(‘//div[@class=”author clearfix”]//img/@alt’) print(len(name_list)) print(name_list.extract()) print(name_list.extract()[0]) print(name_list.extract_first()) css():获取符合要求的所有selector对象的列表 获取内容 name_list=response.css(‘#content-left a > h2::text’)接着extract() 获取属性 css_list=response.css(‘#content-left a > img::attr(src)’)接着extract() 一般不使用,因为中间scrapy会将这个选择器给翻译成xpath再去解析 selector对象 xpath(‘./’):从当前节点向下开始查找 css():和上面的response的方式一样 extract():将对象转化为unicode字符串 extract_first():如果xpath获取不到内容extract_first()返回None,extract()报错 B-Item对象 类字典对象,用法和字典一样,将这个对象转化为字典 stu = dict(stu) ![]() 二:yield item和请求 管道后处理:数据存储|下载 [En]Post-processing of pipeline: data storage | download 【温馨提示】写好pipeline的时候,需要在settings文件中打开一个配置 ITEM_PIPELINES = { ‘huaproject.pipelines.HuaprojectPipeline’:300, } 第一个:处理的管道 第二:优先级,优先级越小,优先级越高(0-1000) [En]Second: priority, the smaller the priority, the higher the priority (0-1000) 多页抓取和批量下载图片 [En]Multi-page crawl and batch download of pictures url规律 第一页list-1-0.html 第二页list-1-1.html 第n页list-1-(n-1).html 三:请求传参【高级请求】 如果一个页面不能将一个item的所有信息全部拿到,需要再次发送请求,再次解析才能将item的所有信息拿到。这种情况怎么办? Original: https://blog.csdn.net/weixin_42549154/article/details/113673363Author: 雪中阳Title: python的scrapy爬虫模块间进行传参_Python爬虫第八天:ScrapyShell|yield item和请求传参… 原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/360432/ 转载文章受原作者版权保护。转载请注明原作者出处! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |